//
//  RegularController.swift
//  HHSwift
//
//  Created by 华宏 on 2020/9/7.
//  Copyright © 2020 huahong. All rights reserved.
//


/**
 ^  表示匹配字符串的开始位置  (例外  用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)
 $  表示匹配字符串的结束位置
 *  表示匹配 零次到多次
 +  表示匹配 一次到多次 (至少有一次)
 ?  表示匹配零次或一次
 .  表示匹配单个字符
 |  表示为或者,两项中取一项
 (  ) 小括号表示匹配括号中全部字符
 [  ] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]
 {  } 大括号用于限定匹配次数  如 {n}表示匹配n个字符  {n,}表示至少匹配n个字符  {n,m}表示至少n,最多m
 \  转义字符 如上基本符号匹配都需要转义字符   如 \*  表示匹配*号
 \w 表示英文字母和数字
 \W  非字母和数字
 \d  表示数字[0-9] 0到9的数字
 \D  非数字
 [.] 匹配小数点 // 也可以用\.来匹配 如果在[]里不需要加\的
 */

/**

练习1:包含一个小写a~z,后面必须是0~9
@"[a-z][0-9]";

练习2:必须第一个是字母,第二个必须是数字
@"^[a-z][0-9]$";

练习3:必须第一个是字母,字母后面跟上4~9个数字
@"^[a-z][0-9]{4,9}$";

练习4:不能是数字开头
@"^[^0-9]";

*/

import UIKit

class RegularController: BaseViewController {

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
      
        let str = "1234324"

        /// 正则匹配手机号
        let rules = "^(1[3-9])\\d{9}$"
//        let _ = isMatch("^(1[3-9])\\d{9}$", string: str)
        let _ = str.isMatch(rules)
        
          
           /// 正则匹配用户身份证号15或18位
        let rules1 = "(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)"
//        let _ = isMatch("(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)", string: str)
        let _ = str.isMatch(rules1)
          
          
           /// 正则匹配用户姓名,20位的中文或英文
        let rules2 = "^[a-zA-Z\\u4E00-\\u9FA5]{1,20}"
//        let _ = isMatch("^[a-zA-Z\\u4E00-\\u9FA5]{1,20}", string: str)
        let _ = str.isMatch(rules2)


        
    }
    
    
    func isMatch(_ rules:String,string:String) -> Bool {
       
        let rules = NSPredicate(format: "SELF MATCHES %@", rules)
        
        return rules.evaluate(with: string)
    }
    

    func RegularExpression() -> Void {
        
        let URLStr = "1234324"
        let pattern = "^[1-9][0-9]{4,11}$"
        
        //NSRegularExpressionCaseInsensitive: 忽略大小写
        let regex = try? NSRegularExpression.init(pattern: pattern, options: .caseInsensitive)
        
        // 只匹配一次
           //regex firstMatchInString:<#(nonnull NSString *)#> options:<#(NSMatchingOptions)#> range:<#(NSRange)#>
           
           // 匹配多次结果
           //matchesInString: 需要匹配的字符串
           //options: NSMatchingReportCompletion 一般使用这个, 匹配到了就会返回结果
           //range : 范围
        let result = regex?.matches(in: URLStr, options: .reportCompletion, range: NSRange(location: 0, length: URLStr.count))
        
        print("匹配到数据：",result)
    }
  
}
